﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using System.Windows.Forms;


namespace WF_Office_Verwaltung
{
    public partial class Vertrag_neu : Form
    {
        nachrichten_klasse aNachrichtenKlasse = new nachrichten_klasse();
        helfer_klasse aHelferKlasse = new helfer_klasse();

        int akt_kunde = -1;
        int int_Wartungsvertrag = -1;
        /// <summary>
        /// Wird das Formular über einen bestehenden Vertrag geladen oder soll der Vertrag neu aufgesetzt werden
        /// </summary>
        /// <param name="Warungsvertrag"></param>
        /// <param name="_akt_kunde"></param>
        public Vertrag_neu(string Warungsvertrag, int _akt_kunde)
        {
            try
            {
                akt_kunde = _akt_kunde;
                InitializeComponent();

                if (Warungsvertrag != "-1")
                {
                    int_Wartungsvertrag = int.Parse(Warungsvertrag);
                    btn_WV_Anlegen.Text = "Speichern";
                }
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("neuer_Vertrag \n Vertrag_neu", ex);
            }
        }
        /// <summary>
        /// Ein vorhanderner Vertrag wird geladen und in die Textboxen und DateTimepicker geladen
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Vertrag_Load(object sender, EventArgs e)
        {
            try
            {
                if (int_Wartungsvertrag != -1)
                {
                    using (var context = new project_entities())
                    {
                        bindingSource_Wartungsvertrag.DataSource = context.sp_WartungsVertrag_detail1(int_Wartungsvertrag).ToList();
                    }
                    txt_Wartungsvertrag.DataBindings.Add("Text", bindingSource_Wartungsvertrag, "Wartungsvertrag");
                    txt_WV_Preis.DataBindings.Add("Text", bindingSource_Wartungsvertrag, "Preis");
                    txt_Abgeschlossen_von.DataBindings.Add("Text", bindingSource_Wartungsvertrag, "Techniker");
                    txt_Adresse_WV.DataBindings.Add("Text", bindingSource_Wartungsvertrag, "Adresse");
                    txt_PLZ_WV.DataBindings.Add("Text", bindingSource_Wartungsvertrag, "PLZ");
                    txt_WV_Ort.DataBindings.Add("Text", bindingSource_Wartungsvertrag, "Ort");
                    dtp_Abgeschlossen.DataBindings.Add("Text", bindingSource_Wartungsvertrag, "Vertragsabschluss");
                    dtp_letzte_Wartung.DataBindings.Add("Text", bindingSource_Wartungsvertrag, "letzte_Wartung");
                }
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("neuer_Vertrag \n Vertrag_Load \n\n", ex);
            }
        }

        Nullable<DateTime> Abgeschlossen_am;
        DateTime letzte_Wartung;
        /// <summary>
        /// Ein neuer Wartungsvertrag wird angelegt
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_WV_Anlegen_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidateChildren(ValidationConstraints.Enabled))
                {
                    string Wartungsvertrag, Preis, Vorname, Adresse, PLZ, Ort;
                    Wartungsvertrag = txt_Wartungsvertrag.Text;
                    Preis = txt_WV_Preis.Text;
                    Vorname = txt_Abgeschlossen_von.Text;
                    Adresse = txt_Adresse_WV.Text;
                    PLZ = txt_PLZ_WV.Text;
                    Ort = txt_WV_Ort.Text;

                    Abgeschlossen_am = dtp_Abgeschlossen.Value;
                    letzte_Wartung = dtp_letzte_Wartung.Value;

                    using (var context = new project_entities())
                    {
                        nachrichten_klasse nk = new nachrichten_klasse();
                        if (int_Wartungsvertrag == -1)
                        {
                            context.sp_create_WV(akt_kunde, Wartungsvertrag, Abgeschlossen_am, letzte_Wartung, Vorname, double.Parse(Preis), Adresse, PLZ, Ort);
                            if (MessageBox.Show("Wartungsvertrag wurde angelegt", "Confirm", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                            {
                                Vertrag_neu.ActiveForm.Close();
                            }
                            btn_WV_Anlegen.Enabled = false;

                        }
                        else
                        {
                            context.sp_update_WV(Wartungsvertrag, double.Parse(Preis), Vorname, Adresse, PLZ, Ort, Abgeschlossen_am, letzte_Wartung, int_Wartungsvertrag);
                            if (MessageBox.Show("Wartungsvertrag wurde aktualisiert ", "Confirm", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                            {

                                bindingSource_Wartungsvertrag.DataSource = context.sp_WartungsVertrag_detail1(int_Wartungsvertrag).ToList();
                                btn_WV_Anlegen.Enabled = false;
                                Vertrag_neu.ActiveForm.Close();
                            }
                        }
                    }
                    int_Wartungsvertrag = -1;
                }
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("neuer_Vertrag : btn_WV_Anlegen_Click \n\n ", ex);
            }
        }
        /// <summary>
        /// Übergibt den gewählten wert an den DateTimePicker
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dtp_letzte_Wartung_Leave(object sender, EventArgs e)
        {
            try
            {
                letzte_Wartung = dtp_letzte_Wartung.Value;
                dtp_letzte_Wartung.Value = letzte_Wartung;
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("neuer_Vertrag : dtp_letzte_Wartung_Leave \n\n", ex);
            }
        }
        /// <summary>
        /// Validierung der Textboxen in dem Formular
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Validating_Vertrag(object sender, CancelEventArgs e)
        {
            // e.Cancel auf false setzen bewirkt das die Textbox verlassen werden kann auch wenn kein gültiger wert drinnen steht
            try
            {
                if (sender == txt_Wartungsvertrag)
                {
                    erpNeuerVertrag.SetError(txt_Wartungsvertrag, "");
                    
                    e.Cancel = string.IsNullOrEmpty(txt_Wartungsvertrag.Text);
                    if (e.Cancel)
                        erpNeuerVertrag.SetError(txt_Wartungsvertrag, "Der Wartungsvertrag braucht eine Art.");
                    else
                        erpNeuerVertrag.SetError(txt_Wartungsvertrag, "");
                }
                else if (sender == txt_WV_Preis)
                {
                    erpNeuerVertrag.SetError(txt_WV_Preis, "");
                    double Zahl = 0;

                    e.Cancel = !double.TryParse(txt_WV_Preis.Text, out Zahl);
                    if (e.Cancel)
                        erpNeuerVertrag.SetError(txt_WV_Preis, "Der Wartungsvertrag braucht einen gültigen Preis.");
                    else
                        erpNeuerVertrag.SetError(txt_WV_Preis, "");
                }
                else if (sender == txt_Abgeschlossen_von)
                {
                    erpNeuerVertrag.SetError(txt_Abgeschlossen_von, "");

                    e.Cancel = string.IsNullOrEmpty(txt_Abgeschlossen_von.Text);
                    if (e.Cancel)
                        erpNeuerVertrag.SetError(txt_Abgeschlossen_von, "Wer hat den Vertrag Abgeschlossen?");
                    else
                        erpNeuerVertrag.SetError(txt_Abgeschlossen_von, "");
                }
                else if (sender == txt_Adresse_WV)
                {
                    erpNeuerVertrag.SetError(txt_Adresse_WV, "");

                    e.Cancel = string.IsNullOrEmpty(txt_Adresse_WV.Text);
                    if (e.Cancel)
                        erpNeuerVertrag.SetError(txt_Adresse_WV, "Auf welcher Adresse geht der Wartungsvertrag?");
                    else
                        erpNeuerVertrag.SetError(txt_Adresse_WV, "");
                }
                else if (sender == txt_PLZ_WV)
                {
                    erpNeuerVertrag.SetError(txt_PLZ_WV, "");
                    int Zahl = 0;
                    e.Cancel = !int.TryParse(txt_PLZ_WV.Text, out Zahl);
                    if (e.Cancel)
                        erpNeuerVertrag.SetError(txt_PLZ_WV, "Die Adresse braucht einen PLZ, \ndiese ist vierstellig und beinhaltet nur Zahen (z.B.: 1010)");
                    else
                        erpNeuerVertrag.SetError(txt_PLZ_WV, "");

                }
                else if (sender == txt_WV_Ort)
                {
                    erpNeuerVertrag.SetError(txt_WV_Ort, "");

                    e.Cancel = string.IsNullOrEmpty(txt_WV_Ort.Text);
                    if (e.Cancel)
                        erpNeuerVertrag.SetError(txt_WV_Ort, "Wo befindet sich die Adresse?");
                    else
                        erpNeuerVertrag.SetError(txt_WV_Ort, "");
                }
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("neuer_Vertrag : Validatin_Vertrag \n \n", ex);
            }
        }
        /// <summary>
        /// Leert die Textbox wenn man die Textbox Auswählt und der string den Standardwert "Wartungsvertrag" hat
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtWartungsvertrag_Enter(object sender, EventArgs e)
        {
            if (txt_Wartungsvertrag.Text == "Wartungsvertrag")
            {
                txt_Wartungsvertrag.Text = "";
            }
        }
        /// <summary>
        /// Setzt die Textbox auf Standard zurück wenn der String Leer ist 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtWartungsvertrag_Leave(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txt_Wartungsvertrag.Text))
            {
                txt_Wartungsvertrag.Text = "Wartungsvertrag";
            }
        }

        private void Vertrag_neu_FormClosing(object sender, FormClosingEventArgs e)
        {
           e.Cancel = false;
        }
    }
}
